#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
修复快乐8历史数据排序的脚本
将数据按日期从旧到新正序排列
"""
import pandas as pd
import os
import logging

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

def fix_kl8_data_order():
    """修复快乐8历史数据的排序"""
    # 文件路径
    file_path = os.path.join(os.path.dirname(__file__), 'kl8_history.csv')
    
    # 检查文件是否存在
    if not os.path.exists(file_path):
        logger.error(f"文件不存在: {file_path}")
        return False
    
    try:
        # 读取CSV文件，指定编码
        logger.info("正在读取快乐8历史数据...")
        # 尝试不同的编码方式读取文件
        encodings = ['utf-8', 'gbk', 'gb2312']
        df = None
        for encoding in encodings:
            try:
                df = pd.read_csv(file_path, encoding=encoding)
                logger.info(f"成功使用 {encoding} 编码读取文件")
                break
            except UnicodeDecodeError:
                logger.warning(f"使用 {encoding} 编码读取失败，尝试下一个编码...")
                continue
        
        if df is None:
            logger.error("无法使用任何编码方式读取文件")
            return False
        
        # 显示原始数据信息
        logger.info(f"原始数据行数: {len(df)}")
        logger.info(f"原始数据日期范围: {df['开奖日期'].min()} 到 {df['开奖日期'].max()}")
        
        # 按日期排序（从旧到新）
        df_sorted = df.sort_values(by='开奖日期', ascending=True)
        
        # 去除重复行（如果有的话）
        df_sorted = df_sorted.drop_duplicates(subset=['期号'], keep='first')
        
        # 显示排序后数据信息
        logger.info(f"排序后数据行数: {len(df_sorted)}")
        logger.info(f"排序后数据日期范围: {df_sorted['开奖日期'].min()} 到 {df_sorted['开奖日期'].max()}")
        
        # 保存回文件
        backup_path = file_path + '.backup'
        logger.info(f"正在创建备份文件: {backup_path}")
        os.rename(file_path, backup_path)
        
        logger.info("正在保存排序后的数据...")
        # 使用utf-8编码保存文件
        df_sorted.to_csv(file_path, index=False, encoding='utf-8')
        
        logger.info("数据排序修复完成!")
        return True
        
    except Exception as e:
        logger.error(f"修复数据排序时发生错误: {e}")
        return False

if __name__ == "__main__":
    fix_kl8_data_order()